package com.ftg.learn.chapter14;

import java.sql.*;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;

/**
 * 学习一下jdbc的基础使用
 * <p>
 * client [idea | java | python ]
 * -- driver [驱动包] jdbc 接口的实现类所在的*.jar
 * -- connector (连接器) [server ip : server port : username : password]
 * server[mysql]
 * -- connection (会话) ： client可以开始与server通信了
 * ------
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/3/6 上午8:25
 */
public class LearnJdbc01 {

    /**
     * 学习代码级别jdbc连接数据库
     * 1 : 四个信息
     * 1.1 ip : localhost   127.0.0.1 本机 。
     * 1.2 port : 10086
     * 1.3 username : root  password : 123456
     * 2 : 驱动类包 , 要为工程引入
     * 2.1 pom.xml里面引入依赖
     * <dependency>
     * <groupId>mysql</groupId>
     * <artifactId>mysql-connector-java</artifactId>
     * <version>8.0.28</version>
     * </dependency>
     * 3 ： connection : java核心接口，会话
     * 3.1 jdbc提供的connection接口的实现类方法调用
     * 3.1 DriverManager 注册驱动
     * 3.2 得到会话
     * 4 statment ： 用于执行静态sql语句
     * 5 我们要得到结果 ResultSet 结果集,表示查询sql dml执行以后的结果存储的结构
     * 6 遍历resultset ·「散列结构」 for 不能用 ；
     * 7 把相应的流关闭
     */
    public static void main(String[] args) {
        String ip = "localhost";
        int port = 10086;
        String username = "root";
        String password = "123456";

//        通过基础信息生成url地址
//         [协议][数据库标识]   [ip地址]   [端口] [实例]？[时区]
//        "jdbc:  mysql:   //localhost:10086/homework?serverTimezone=Asia/Harbin";
        String url = "jdbc:mysql://" + ip + ":" + port + "/homework?serverTimezone=Asia/Harbin";

        //java.sql.Connection
        // DriverManager 加载以及管理数据库厂商给的驱动类
        //registerDriver 注册驱动类;  要求提供一个Driver接口的实现类
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //声明java.sql.Driver接口引用 driver 对应的实现类为   mysql
            Driver driver = new com.mysql.cj.jdbc.Driver();
            //DriverManager 驱动管理类，加载当前驱动类
            DriverManager.registerDriver(driver);
            //综上所述我们明白 jdbc连接的是mysql

            //完成mysql登陆认证功能,得到了conn 会话
            conn = DriverManager.getConnection(url, username, password);
            //到此如果没有错误表示我们连接上了mysql

            String sql = "select sno,sname,sage,ssex from student";
            //通过会话创建 statement
            stmt = conn.createStatement();
            //用executeQuery 执行查询功能sql
            rs = stmt.executeQuery(sql);

            //rs.next() 判断游标右侧是否有数据,如果有数据 并移动游标向右
            while (rs.next()) {
                //getString 返回列的值
                String sno = rs.getString(1);
                String sname = rs.getString(2);
                int age = rs.getInt(3);
                String sex = rs.getString(4);

                System.out.printf("编号为%s\t;姓名为%s\t;年龄为%d\t;性别为%s\n", sno, sname, age, sex);
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //与try catch连用的表示最终一定执行
            try {
                if (null != rs) {
                    rs.close();
                }
                if (null != stmt) {
                    stmt.close();
                }
                if (null != conn) {
                    conn.close();
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }


}
